從上篇文章中我們可以瞭解
- 爬蟲的本質是要模擬人類瀏覽網頁的行為
- 實際我們在瀏覽網頁時,瀏覽器與伺服器之間如何傳遞訊息
若對上一篇文章有興趣,可參考【爬蟲基礎介紹】part1: 什麼是爬蟲?
爬蟲的本質是模擬人類瀏覽網頁的行為,人類操作瀏覽器瀏覽網頁,也就是最終程式需要模擬瀏覽器與伺服器互動,不被發現偽裝,才能成功完成擷取數據的過程。因此我們需要瞭解瀏覽器與伺服器如何互動
本篇文章會更深入說明,瀏覽器與伺服器在互動時的角色與行為規範
request與response
如同part1文章所述,我們想知道博客來2021年度百大暢銷榜有哪些書? 博客來2021年度百大暢銷榜
當我們點擊博客來的網頁時,有四個專有名詞需要瞭解
- 客戶端(Client):連網設備、瀏覽器,會發送 請求 (request) 到Server
- 伺服器端(Server):收到Client發送的request,開始處理請求,並 回應 (response) 到Client
- 請求資料(request):Client向Server 索取資料 的行為
- 回應資料(response):Server 回傳資料 到Client的行為
我們可以先想像在Client與Server間有個郵差協助彼此互相傳遞消息,請求必有回應,
最後資料呈現於網頁上,如下圖:
HTTP協議
引用維基百科說明
request-response: 電腦在電腦網路中用來相互通信的基本方法
而網路通訊的規範基礎即HTTP協議,也就是超文本傳輸協定
就像是寫信時,必須要有特定的信封,收件人必須要寫在中間,信封左右或上下寫上寄件人與收件人的地址,郵差才能迅速無誤幫我們寄出信件一樣,網路傳輸時需要遵守特定的規範,才能讓Client與Server之間能看懂訊號,並回傳正確的數據。
不知道大家是否曾經在瀏覽網頁時收到以下畫面
無論是無法找到IP位置,或者是網頁回應時間過長無法連線等等訊息,都是告訴你現在網頁無法連線
- 如何透過HTTP得知現在網頁是否連線成功? 若無法連線是什麼原因造成?可以透過
HTTP狀態碼(HTTP Status Code)
HTTP 狀態碼以數字表示,通常以開頭的數字可以判斷連線狀況
一般成功連上網頁的Status Code為200,更多可參考
A. MDN技術文件
B. 常見與不常見的 HTTP Status Code(有趣的說明)
- 1XX : 臨時訊息提示,通常代表請求被接受,可繼續請求
- 2XX : 請求成功,常見代碼為200
- 3XX : 網頁重新導向,常見代碼為302,用戶需要採取進一步的行動才能完成請求
- 4XX : 客戶端錯誤,常見代碼為404,找不到伺服器位置(網址打錯之類)
- 5XX : 伺服器遇到錯誤,無法完成請求,常見代碼為504,Gateway Time-out
- 如何讓瀏覽器與伺服器溝通良好呢? 需透過一些額外資料的設定,這些設定稱為
HTTP 表頭(HTTP headers)
一般在爬蟲程式,我們只討論Request headers,更多可參考維基百科
常用到的headers
- Cookie : Server傳送予使用者瀏覽器的一個小片段資料,可追蹤記錄並分析使用者行為
- User-Agent : Server從用戶的軟體規格、瀏覽器類別、版本號…等識別請求的Client為手機、電腦或平板,從而選擇適當的內容回應
- Content-Type : Server回傳的內容格式
- Referer : 當前網頁的上一頁從哪裡來
- Host : Server主機位置
- 如何向瀏覽器請求資料?
HTTP定義幾種標準方法可以向網址(URL)執行特定操作的請求方法
一般常見的兩種為GET & POST,關於兩者差別,更詳細可參考表單中的 GET 與 POST 有什麼差別?
- GET: 向Server取得資料,所有提交的數據都顯示在 URL(網址) 上
- 舉例:單純向Server取得文字、圖片等資訊
- POST: 向Server新增/提交數據,數據被包在message-body內
- 舉例:網頁登入會員資訊
其他Request Method,可參考MDN技術文件
- PUT : 取代request指定的數據
- PATCH : 修改部分request指定的數據
- DELETE : 刪除指定資源
- HEAD : 只獲取request的header,不要response body
- OPTIONS : 查看Server提供哪些Request Method
- CONNECT : 通常用於代理伺服器(Proxy Server)
- TRACE : 回傳Server收到的request,主要用於測試
request-response 溝通範例
向博客來送出請求,回傳博客來2021年度百大暢銷榜數據,request-response內容:
電腦規格(User-Agent參考)
- 作業系統:Mac OS
- 瀏覽器:Safari
Request
URL:
https://www.books.com.tw/web/annual10
Request Method: Get
Message Body: 無
Request Headers (僅列出部分):
- Host:
www.books.com.tw
- Referer:
https://www.books.com.tw
- User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15
- Host:
Response
- Response Status code: 200
- Response body: 博客來2021年度百大暢銷榜網頁數據
- Response Headers (僅列出部分):
- Content-Type: text/html; charset=UTF-8
- Expires: Mon, 27 Jun 2022 07:51:02 GMT
- Cache-Control:max-age=0
備註
- Response Header中Cache-Control與Expires說明,可參考循序漸進理解 HTTP Cache 機制
評論